/**
 * 
 * 进程是操作系统分配资源和调度
 * 
 * 线程池
 *  
 * Node是单线程，非阻塞IO
 *      唯一的主线程，接受客户端请求，会去请求数据库，但不会阻塞主线程
 * 优点：
 *      节约内存
 *      节约上下文切换的时间
 *      并发资源处理，锁的问题
 * 
 * 多线程是如何实现的？
 *      并不是在同一个时间点执行多个任务，而是通过快速切换时间片来实现
 * 
 * 为什么js是单线程的？
 *      
 * 事件
 *      JS会先执行栈中的代码，然后执行事件循环中的代码
 * 执行栈    回调函数队列--异步成功之后放进队列
 * 
 * 同步和异步？ 同步异步关注的是消息通知的方式
 *      同步：调用者主动等待调用结果
 *    
 *      异步：调用者通过通知、回调函数的方式的到结果
 * 阻塞非阻塞关注的是等待结果的状态
 * 
 *  同步异步是由被调用者决定
 *  
 * 
 *  同步阻塞
 *      等待的过程就是调用者被阻塞
 *  异步阻塞
 *      
 *  同步非阻塞
 *  异步非阻塞
 */

function read(){
    console.log(1)
    setTimeout(function(){
        console.log(2)
    })
    console.log(3)
}


function next(){
    console.log(1)
    setTimeout(function(){
        console.log(2)
    })
    // 把这个函数放到当前执行栈尾部
    process.nextTick(function(){
        console.log(3)
        process.nextTick(function(){
            console.log(4);
            
        })
    })
}

next()


// 可以通过代码进入repl



